const express = require('express');
const router = express.Router();
const { body } = require('express-validator');
const userController = require('../controllers/userController');
const authMiddleware = require('../middleware/auth').authMiddleware;
const adminMiddleware = require('../middleware/auth').adminMiddleware;

// 用户注册
router.post('/register', [
  body('username').notEmpty().withMessage('用户名不能为空').isLength({ min: 3, max: 20 }).withMessage('用户名长度在3-20之间'),
  body('email').notEmpty().withMessage('邮箱不能为空').isEmail().withMessage('邮箱格式不正确'),
  body('password').notEmpty().withMessage('密码不能为空').isLength({ min: 6 }).withMessage('密码长度至少为6位')
], userController.register);

// 用户登录
router.post('/login', [
  body('email').notEmpty().withMessage('邮箱不能为空').isEmail().withMessage('邮箱格式不正确'),
  body('password').notEmpty().withMessage('密码不能为空')
], userController.login);

// 获取当前用户信息（需要认证）
router.get('/me', authMiddleware, userController.getUserInfo);

// 更新用户信息（需要认证）
router.put('/me', [
  authMiddleware,
  body('username').optional().isLength({ min: 3, max: 20 }).withMessage('用户名长度在3-20之间'),
  body('avatar').optional().isURL().withMessage('头像URL格式不正确')
], userController.updateUserInfo);

// 更新密码（需要认证）
router.put('/me/password', [
  authMiddleware,
  body('oldPassword').notEmpty().withMessage('旧密码不能为空'),
  body('newPassword').notEmpty().withMessage('新密码不能为空').isLength({ min: 6 }).withMessage('新密码长度至少为6位')
], userController.updatePassword);

// 管理员获取所有用户（需要管理员权限）
router.get('/', [authMiddleware, adminMiddleware], userController.getAllUsers);

// 管理员更新用户会员信息（需要管理员权限）
router.put('/:id/membership', [
  authMiddleware,
  adminMiddleware,
  body('membership_level').notEmpty().withMessage('会员等级不能为空').isInt({ min: 0, max: 3 }).withMessage('会员等级必须是0-3之间的整数'),
  body('points').optional().isInt({ min: 0 }).withMessage('积分必须是非负整数')
], userController.updateUserMembership);

module.exports = router;